/************************************************************
 * Project Name         [Thinking_In_Java]
 * File Name            [Example_09_Varargs.java]
 * Creation Date        [19-Jun-2014]
 * 
 * Copyright© ge.y.yang@gmail.com All Rights Reserved
 * 
 * Work hard, play harder, think big and keep fit
 ************************************************************/
package pkg_02_oop;

/**
 * 可变参数类型
 * 
 * @author 不落的太阳(Sean Yang)
 * @version 1.0
 * @since JDK 6
 * 
 */
public class Example_09_Varargs {

	/*
	 * 可变长参数本质上是一个数组, 对于某个声明了可变参数的方法来说, 既可以接受离散的值, 也可以接受数组对象 一个方法最多有一个可变参数,
	 * 可变长参数必须是整个参数列表的最后一个
	 */

	/**
	 * 打印消息, 消息数量可以任意多
	 * 
	 * @param debug
	 *            是否debug模式
	 * @param msgs
	 *            待打印的消息
	 */
	public static void printMessage(boolean debug, String... msgs) {
		if (debug) {
			// 打印消息的长度
			System.out.println("DEBUG: 待打印消息的个数为: " + msgs.length);
		}
		for (String str : msgs) {
			System.out.println(str);
		}
		if (debug) {
			// 打印消息的长度
			System.out.println("DEBUG: 打印消息结束");
		}
	}

	/**
	 * 重载printMessage方法
	 * 
	 * @param debugMode
	 *            是否debug模式
	 * @param msgs
	 *            待打印的消息
	 */
	public static void printMessage(int debugMode, String... msgs) {
		if (debugMode != 0) {
			// 打印消息的长度
			System.out.println("DEBUG: 待打印消息的个数为: " + msgs.length);
		}
		for (String str : msgs) {
			System.out.println(str);
		}
		if (debugMode != 0) {
			// 打印消息的长度
			System.out.println("DEBUG: 打印消息结束");
		}
	}

	/**
	 * 返回所有double数值中的最大值
	 * 
	 * @param args
	 *            double类型的数值
	 * @return 最大值
	 */
	public static double max(double... args) {
		double largest = Double.MIN_VALUE;
		for (double d : args) {
			if (d > largest) {
				largest = d;
			}
		}
		return largest;
	}

	/**
	 * 测试方法
	 * 
	 * @param args
	 *            命令行参数
	 */
	public static void main(String... args) {
		Example_09_Varargs.printMessage(true);
		Example_09_Varargs.printMessage(false, "The 1st message",
				"The 2nd message");
		// 可以将一个数组传递给可变长参数方法的最后一个参数
		Example_09_Varargs.printMessage(true, new String[] { "The 1st message",
				"The 2nd message", "the 3rd message" });
		Example_09_Varargs
				.printMessage(1, "The 1st message", "The 2nd message");

		System.out.println(Example_09_Varargs.max(100, 20, 80, 40, 70, 50));
	}

}
